iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0

Golang

switch-case 與select
如題來看一下switch-case 與select 是如何運作的,廢話不多說,直接上個範例來瞧瞧吧!

switch-case

package main

import "fmt"

func getType(i interface{}) {
    switch t := i.(type) {
    case int:
        fmt.Printf("is interger %d \n", t)
    case string:
        fmt.Printf("is string %s \n", t)
    case float64:
        fmt.Printf("is float64 %v \n", t)
    default:
        fmt.Printf("type error")
    }
}

func main() {
    
    var i int = 100
    getType(i)
    var j float64 = 45.55
    getType(j)
    var k string = "foo"
    getType(k)
}

Select
Select 是監聽,以下的部分我是覺得有點難懂,所以只能大概大概地寫出來,可能需要真的使用到的時候才能理解其作用

package main

import "fmt"

func main() {
    ch := make(chan int, 1)

    ch <- 1
    select {
    case <-ch:
        fmt.Println("random 01")
    case <-ch:
        fmt.Println("random 02")
    }
}

這樣執行的時候,其實是會隨機亂跳的,如果把ch <- 1註解起來,則是會報錯” deadlock!”,這時候如果把程式碼修改為

package main

import "fmt"

func main() {
    ch := make(chan int, 1)

    
    select {
    case <-ch:
        fmt.Println("random 01")
    case <-ch:
        fmt.Println("random 02")
    default:
        fmt.Println("exit")   
    }
}

這樣就沒事情了,因為在有default的情況下會去執行他

Select基本上只能應用於channel上,以範例來看是可以做channel的資料接收及溝通使用。如果有滿足多個條件則是隨機選擇,但在switch-case這點就比較不同,就跟其他語言雷同,是看順序的。


上一篇
goroutine
下一篇
指標
系列文
go go let's go - golang 從0開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言